我們從前面的Java一般專案感受到我們開發的流程中有多們多的手動流程等著我們(從下載Jar、compile、test、deploy等),我們在Java Web專案感受與IDE耦合的專案會讓我們沒有辦法隨心所欲使用我們愛的IDE工具,今日我們試著使用maven工具來幫我們解決
我們在command line使用maven創建我們的專案
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.5 -DinteractiveMode=false
產生專案結構如下,他幫我們在src下分別創建main與test資料夾分隔測試程式碼與開發的程式碼,未來打包我們就可以只針對src/main下進行打包
\---my-app
| pom.xml
|
+---.mvn
| jvm.config
| maven.config
|
\---src
+---main
| \---java
| \---com
| \---mycompany
| \---app
| App.java
|
\---test
\---java
\---com
\---mycompany
\---app
AppTest.java
pom檔裡面乘載我們需要最基本所需要使用的測試jar套件的資訊,以及構建相關所需的maven plugin,當然還有不可或缺的JDK版本。我們在下加入我們先前專案使用的logback
<dependencies>
<!-- logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.18</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.17</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
App.java
package com.mycompany.app;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Hello world!
*/
public class App {
// 建立 Logger 實例
private static final Logger logger = LoggerFactory.getLogger(App.class);
public static void main(String[] args) {
logger.info("Application running...");
System.out.println(runApplication());
logger.info("Application finished.");
}
public static String runApplication() {
return "Hello World!";
}
}
AppTest.java
package com.mycompany.app;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
/**
* Unit test for simple App.
*/
public class AppTest {
@Test
public void testRunApplication() {
assertEquals("Hello World!", App.runApplication());
}
}
修改pom.xml中的tag build,設定產出jar檔的名稱
<build>
<finalName>MyApp</finalName>
<!-- 略 -->
</build>
執行command
mvn test
測試結果
執行command
mvn package
搬檔案(MyApp.jar)到MyApp資料夾目錄,並修改bat檔
@echo off
java -cp "MyApp.jar;lib\*" com.mycompany.app.App
pause
執行bat結果
今天的Maven command解決了什麼樣的事情呢